package tp.igl.Controler;


import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import tp.igl.View.SegmentField;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;

/**
 * <b>SegmentControler est une class utilisé pour controler les champs de type 
 * AdresseField.<b>
 * <p>
 * Cette class impliment les interfaces EventHandler<ActionEvent> , ChangeListener<Boolean>, 
 * elle addure que le contenu du champ est un nombre entre zéro et 255 
 * </p>
 * @see AdresseField
 * @see EventHandler
 * @see ChangeListener
 * @author Redouane
 */
public class SegmentControler implements EventHandler<ActionEvent>, ChangeListener<Boolean> {
    /**
     * le SegmentField a controlé.
     */
    SegmentField seg;
    /**
     *Constructeur SegmentControler.
     * <p>
     * A la construction de l'objet SegmentControler,on doit fournir le SegmentField qu' 
     * il sera controlé par ce objet.
     * </p>
     * @see SegmentField
     * @param seg
     */
    public SegmentControler(SegmentField seg ) {
        this.seg=seg;
    }

    /**
     * Elle est executée a chaque fois q'une evenement de type ActionEvent ce produit 
     * pour assurer que le contenu du champs est un nombre de 3 chiffres au maximum.
     * @param t un objet de type ActionEvent qui contient les informations sur la
     * source de l'evenement.
     */
    @Override
    public void handle(ActionEvent t) {
        if(seg.getText().length()<=3)
                    // si la valeur du champ est correct mettre a jour le segment
            (seg.getSegment()).setValeur(Integer.parseInt(seg.getText()));  
        else
                    // remplire le champs avec l'ancienne valeur
            seg.setText(new Integer(seg.getSegment().getValeur()).toString());
    }

    /**
     * Elle est executée a chaque fois q'un changement ce produit dans le champ. pour controler 
     * le contenue de champ lorsqu'il sera modifié par l'utilisateur.
     * @param ov la liste des valeur observable
     * @param t 
     * @param t1
     */
    @Override
    public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
        if(!t1){
            seg.fireEvent(new ActionEvent()); // appele la methode handle
        }
    }
}
